package com.example.onlineanswer.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.example.onlineanswer.model.dto.*;
import com.example.onlineanswer.model.vo.UserInfoVO;
import com.example.onlineanswer.model.vo.UserListVO;

import java.util.List;

/**
 * 用户服务接口
 */
public interface UserService {

    /**
     * 用户注册
     * @param registerDTO 注册信息
     * @return 注册结果
     */
    boolean register(RegisterDTO registerDTO);

    /**
     * 用户登录
     * @param loginDTO 登录信息
     * @return 登录成功返回token，失败返回null
     */
    String login(LoginDTO loginDTO);

    /**
     * 获取用户信息
     * @param userId 用户ID
     * @return 用户信息
     */
    UserInfoVO getUserInfo(Long userId);

    /**
     * 发送邮箱验证码
     * @param email 邮箱
     * @return 发送结果
     */
    boolean sendEmailVerifyCode(String email);

    /**
     * 验证邮箱验证码
     * @param email 邮箱
     * @param code 验证码
     * @return 验证结果
     */
    boolean verifyEmailCode(String email, String code);

    /**
     * 检查用户名是否已存在
     * @param username 用户名
     * @return 存在返回true，不存在返回false
     */
    boolean checkUsernameExists(String username);

    /**
     * 检查邮箱是否已存在
     * @param email 邮箱
     * @return 存在返回true，不存在返回false
     */
    boolean checkEmailExists(String email);
    
    /**
     * 分页查询用户列表
     * @param queryDTO 查询条件
     * @return 用户列表分页对象
     */
    IPage<UserListVO> getUserList(UserQueryDTO queryDTO);
    
    /**
     * 获取所有可用角色
     * @return 角色列表
     */
    List<String> getAllowedRoles();
    
    /**
     * 添加用户
     * @param userAddDTO 用户添加DTO
     * @return 添加结果
     */
    boolean addUser(UserAddDTO userAddDTO);
    
    /**
     * 更新用户信息
     * @param userUpdateDTO 用户更新DTO
     * @return 更新结果
     */
    boolean updateUser(UserUpdateDTO userUpdateDTO);
    
    /**
     * 更新用户密码
     * @param userPasswordDTO 用户密码DTO
     * @return 更新结果
     */
    boolean updateUserPassword(UserPasswordDTO userPasswordDTO);
    
    /**
     * 更新用户角色
     * @param userRoleDTO 用户角色DTO
     * @return 更新结果
     */
    boolean updateUserRole(UserRoleDTO userRoleDTO);
    
    /**
     * 更新用户状态
     * @param userStatusDTO 用户状态DTO
     * @return 更新结果
     */
    boolean updateUserStatus(UserStatusDTO userStatusDTO);
    
    /**
     * 删除用户
     * @param userId 用户ID
     * @return 删除结果
     */
    boolean deleteUser(Long userId);
    
    /**
     * 更新个人资料
     * @param userId 用户ID
     * @param profileUpdateDTO 个人资料更新DTO
     * @return 更新结果
     */
    boolean updateProfile(Long userId, UserProfileUpdateDTO profileUpdateDTO);
    
    /**
     * 修改密码
     * @param userId 用户ID
     * @param passwordUpdateDTO 密码修改DTO
     * @return 更新结果
     */
    boolean updatePassword(Long userId, UserPasswordUpdateDTO passwordUpdateDTO);
} 